function All() {}
All.prototype = {
  timer: "",
  debounce(fn, delay = 500) {
    var _this = this;
    return function (arg) {
      //获取函数的作用域和变量
      let that = this;
      let args = arg;
      clearTimeout(_this.timer); // 清除定时器
      _this.timer = setTimeout(function () {
        fn.call(that, args);
      }, delay);
    };
  },
  setCookie(val) {
    //cookie设置[{key:value}]、获取key、清除['key1','key2']
    // 优化前
    // for (var i = 0, len = val.length; i < len; i++) {
    //   for (var key in val[i]) {
    //     document.cookie =
    //       key + '=' + encodeURIComponent(val[i][key]) + '; path=/';
    //   }
    // }
    // 优化后，forEach
    val.forEach((item) => {
      for (var key in item) {
        document.cookie =
          key + "=" + encodeURIComponent(item[key]) + "; path=/";
      }
    });
  },
  getCookie(name) {
    const cookieString = document.cookie;
    const cookieArray = cookieString.split("; ");
    for (let i = 0; i < cookieArray.length; i++) {
      const cookie = cookieArray[i].split("=");
      if (name === cookie[0]) {
        return decodeURIComponent(cookie[1]);
      }
    }
  },
  clearCookie(name) {
    var myDate = new Date();
    myDate.setTime(-1000); //设置时间
    // 优化前
    // for (var i = 0, len = name.length; i < len; i++) {
    //   document.cookie =
    //     '' + name[i] + "=''; path=/; expires=" + myDate.toGMTString();
    // }
    // 优化后使用forEach方法来遍历name
    name.forEach(function (cookieName) {
      document.cookie =
        cookieName + "=''; path=/; expires=" + myDate.toGMTString();
    });
  },
  arrToStr(arr) {
    // 优化前
    // if (arr) {
    //   return arr
    //     .map((item) => {
    //       return item.name;
    //     })
    //     .toString();
    // }
    // 优化前，使用了map方法和toString方法，需要进行两次操作；优化后，使用了map和join方法，只需要进行一次操作
    return arr?.length ? arr.map((item) => item.objName).join(",") : "";
  },
  toggleClass(arr, elem, key = "id") {
    return arr.some((item) => {
      return item[key] == elem[key];
    });
  },
  //
  toChecked(arr, elem, key = "id") {
    var isIncludes = this.toggleClass(arr, elem, key);
    !isIncludes ? arr.push(elem) : this.removeEle(arr, elem, key);
  },
  //   //
  //   toChecked(arr, elem, key = 'id') {
  //     arr[!this.toggleClass(arr, elem, key) ? 'push' : 'removeEle'](elem, key);
  //   },
  removeEle(arr, elem, key = "id") {
    // 优化前
    var includesIndex;
    // arr.map((item, index) => {
    //   if (item[key] == elem[key]) {
    //     includesIndex = index;
    //   }
    // });
    // arr.splice(includesIndex, 1);
    // 优化后，使用findIndex方法
    let index = arr.findIndex((item) => item[key] == elem[key]);
    arr.splice(index, 1);
  },
  // 优化前
  //   setApproverStr(nodeConfig) {
  //     if (nodeConfig.settype == 1) {
  //       if (nodeConfig.nodeUserList.length == 1) {
  //         return nodeConfig.nodeUserList[0].name;
  //       } else if (nodeConfig.nodeUserList.length > 1) {
  //         if (nodeConfig.auditType == 1) {
  //           return this.arrToStr(nodeConfig.nodeUserList);
  //         } else if (nodeConfig.auditType == 2) {
  //           return nodeConfig.nodeUserList.length + '人会签';
  //         }
  //       }
  //     } else if (nodeConfig.settype == 2) {
  //       let level =
  //         nodeConfig.directorLevel == 1
  //           ? '直接主管'
  //           : '第' + nodeConfig.directorLevel + '级主管';
  //       if (nodeConfig.auditType == 1) {
  //         return level;
  //       } else if (nodeConfig.auditType == 2) {
  //         return level + '会签';
  //       }
  //     } else if (nodeConfig.settype == 4) {
  //       if (nodeConfig.selectRange == 1) {
  //         return '发起人自选';
  //       } else {
  //         if (nodeConfig.nodeUserList.length > 0) {
  //           if (nodeConfig.selectRange == 2) {
  //             return '发起人自选';
  //           } else {
  //             return '发起人从' + nodeConfig.nodeUserList[0].name + '中自选';
  //           }
  //         } else {
  //           return '';
  //         }
  //       }
  //     } else if (nodeConfig.settype == 5) {
  //       return '发起人自己';
  //     } else if (nodeConfig.settype == 7) {
  //       return (
  //         '从直接主管到通讯录中级别最高的第' +
  //         nodeConfig.examineEndDirectorLevel +
  //         '个层级主管'
  //       );
  //     }
  //   },
  // 优化后 ，使用switch语句
  setApproverStr(nodeConfig) {
    let approverStr;
    switch (nodeConfig.participantFormat) {
      case 1:
        if (nodeConfig.nodeUserList.length == 1) {
          approverStr = nodeConfig.nodeUserList[0].userStaffName;
        } else if (nodeConfig.nodeUserList.length > 1) {
          if (nodeConfig.auditType == 1) {
            approverStr = this.arrToStr(nodeConfig.nodeUserList);
          } else if (nodeConfig.auditType == 2) {
            approverStr = nodeConfig.nodeUserList.length + "人会签";
          }
        }
        break;
      case 2:
        let level =
          nodeConfig.directorLevel == 1
            ? "直接主管"
            : "第" + nodeConfig.directorLevel + "级主管";
        if (nodeConfig.auditType == 1) {
          approverStr = level;
        } else if (nodeConfig.auditType == 2) {
          approverStr = level + "会签";
        }
        break;
      case 4:
        if (nodeConfig.selectRange == 1) {
          approverStr = "发起人自选";
        } else {
          if (nodeConfig.nodeUserList.length > 0) {
            if (nodeConfig.selectRange == 2) {
              approverStr = "发起人自选";
            } else {
              approverStr =
                "发起人从" +
                nodeConfig.nodeUserList[0].userStaffName +
                "中自选";
            }
          } else {
            approverStr = "";
          }
        }
        break;
      case 5:
        approverStr = "发起人自己";
        break;
      case 7:
        approverStr =
          "从直接主管到通讯录中级别最高的第" +
          nodeConfig.examineEndDirectorLevel +
          "个层级主管";
        break;
    }
    return approverStr;
  },
  dealStr(str, obj) {
    let arr = [];
    let list = str.split(",");
    // 优化前
    // for (var elem in obj) {
    //   list.map((item) => {
    //     if (item == elem) {
    //       arr.push(obj[elem].value);
    //     }
    //   });
    // }
    // 优化后：优化前使用 for in 循环，会迭代出对象的所有可枚举属性，包括原型链上的属性，会导致多次循环，影响性能。 优化后使用 forEach 循环，并使用 hasOwnProperty 来检查是否为自身属性，提高了执行效率。
    list.forEach((item) => {
      if (obj.hasOwnProperty(item)) {
        arr.push(obj[item].value);
      }
    });
    return arr.join("或");
  },
  conditionStr(nodeConfig, index) {
    const comparatorList = ["", ">", "<", "≥", "≤", ""];
    const comparatorList2 = ["", "<", "≤", ""];
    let ctlName = "控件";
    let str = "";
    const { conditionType, groupsDetailList } =
      nodeConfig?.conditionNodes[index];
    if (conditionType === 2) return "不满足其他分支条件时，进入该分支";
    if (!groupsDetailList?.length) return "条件为空";
    groupsDetailList.forEach((item) => {
      if (!item.conditionItemsList?.length) return "条件为空";
      item.conditionItemsList.forEach((participantItem) => {
        ctlName = participantItem.ctlName;
        str += str === "" ? "" : " 并且 ";
        if (participantItem.conditionItemType === 1) {
          str += "发起人属于：";
          if (!participantItem.compareValueThree) {
            return str;
          }
          const arr = JSON.parse(participantItem.compareValueThree);
          if (arr.length) {
            str += arr.map((a) => a.name);
          }
        }
        //conditionItemType === 2   除发起人外的其他条件
        if (participantItem.conditionItemType === 2) {
          if (participantItem.comparatorType === 5) {
            //介于两者之间
            str += `${participantItem.compareValueOne} ${
              comparatorList2[participantItem.comparatorOne]
            }${ctlName}${comparatorList2[participantItem.comparatorTwo]}${
              participantItem.compareValueTwo
            }`;
          } else {
            str += `${ctlName} ${
              comparatorList[participantItem.comparatorType]
            } ${participantItem.compareValueOne}`;
          }
        }
      });
    });
    return str;
    // if (item?.length > 0) {
    //   for (let i = 0; i < item.length; i++) {
    //     let flag = str === "" ? "" : "并且";
    //     let {
    //       optType,
    //       leftCustomContent,
    //       rightCustomContent,
    //       showName,
    //       leftOptType,
    //       rightOptType,
    //     } = item[i];
    //     let optTypeStr = ["", ">", "<", "≥", "≤", ""][optType];
    //     str += ` ${flag} ${showName} ${optTypeStr} ${leftCustomContent} `;
    //   }
    // }

    // return str;
  },
  copyerStr(nodeConfig) {
    // 修改前
    // if (nodeConfig.nodeUserList.length != 0) {
    //   return this.arrToStr(nodeConfig.nodeUserList);
    // } else {
    //   if (nodeConfig.ccSelfSelectFlag == 1) {
    //     return '发起人自选';
    //   }
    // }
    // 修改后：优化前使用了if else语句，而优化后使用了三元表达式，使得代码更加简洁，更易读。
    return "xxx";
    return nodeConfig.nodeUserList.length != 0
      ? this.arrToStr(nodeConfig.nodeUserList)
      : nodeConfig.ccSelfSelectFlag == 1
      ? "发起人自选"
      : "";
  },
  toggleStrClass(item, key) {
    // 修改前
    //   let a = item.zdy1 ? item.zdy1.split(",") : []
    //   return a.some(item => { return item == key });
    // 修改后：优化前使用了some方法来检查数组中是否存在特定的值，优化后使用includes方法来检查数组中是否存在特定的值，并且在检查之前使用了短路运算符来确保item.zdy1有值，如果没有值则使用空字符串。
    let a = (item.zdy1 || "").split(",");
    return a.includes(key);
  },
};

export default new All();
